// import Vue from 'vue'

export default class CombineWaybillValidator {
  validate ({ type, selection, length, waybills }, $vue) {
    const close = [10, 20, 50, 60];
    let invalidArr = [];
    let financePay = [];    // 产生财务状态的子单编号 3 已结账 > 2 已对账 > 1 已加入对账单
    let financeReconciled = [];
    let financeJoin = [];
    // 预付款 > 到付款 > 代收款
    let financePrepayFee = []; // 预付款 3已收已付 > 1已收 > 2已付; 
    let financeArrivePayFee = []; // 到付款 
    let financeCollectionFee = []; // 代收款

    waybills && waybills.map(item => {
      if (close.includes(item?.closeStatus)) {
        invalidArr.push(item.contractNo);
      }
      if (item?.finance?.financeFlag === 3) {
        financePay.push(item.contractNo);
      }
      if (item?.finance?.financeFlag === 2) {
        financeReconciled.push(item.contractNo);
      }
      if (item?.finance?.financeFlag === 1) {
        financeJoin.push(item.contractNo);
      }
      if (item?.finance?.prepayFeeFlag) {
        financePrepayFee.push(item.contractNo);
      }
      if (item?.finance?.arrivePayFeeFlag) {
        financeArrivePayFee.push(item.contractNo);
      }
      if (item?.finance?.collectionFeeFlag) {
        financeCollectionFee.push(item.contractNo);
      }
    })

    switch (type) {
      case 'combine':
        if (selection?.length < length) {
          $vue.$message({ type: 'warning', message: `请选择至少${length}条记录` })
          return Promise.reject(new Error(`请选择至少${length}条记录`))
        }
        let invalidWaybill = [];
        selection.map(item => {
          // billDayStatus 0：未关账，1已关账
          if (item.billDayStatus === 1) {
            invalidWaybill.push(item.contractNo);
          }
        })
        if (invalidWaybill.length) {
          return $vue.$confirm(`运单(合同号${invalidWaybill.toString()})已过关账期，加入合单将影响合单报价，是否确定继续操作?`,
            "提示",
            {
              confirmButtonText: "确定",
              type: "warning",
              closeOnClickModal: false
            }).then(() => {
              return Promise.resolve(true)
            });
        }
        break;

      case 'cancelDispatch':
        // 收付款前置
        if (financePrepayFee.length) {
          $vue.$message({ type: 'warning', message: `运单(合同号${financePrepayFee.toString()})预付款已在收付款，不能操作` });
          return Promise.reject(new Error(`运单(合同号${financePrepayFee.toString()})预付款已在收付款，不能操作`));
        } else if (financeArrivePayFee.length) {
          $vue.$message({ type: 'warning', message: `运单(合同号${financeArrivePayFee.toString()})货到付款已在收付款，不能操作` });
          return Promise.reject(new Error(`运单(合同号${financeArrivePayFee.toString()})货到付款已在收付款，不能操作`));
        } else if (financeCollectionFee.length) {
          $vue.$message({ type: 'warning', message: `运单(合同号${financeCollectionFee.toString()})代收货款已在收付款，不能操作` });
          return Promise.reject(new Error(`运单(合同号${financeCollectionFee.toString()})代收货款已在收付款，不能操作`));
        }
        // 已结账、已对账、已加入对账单前置
        if (financePay.length) {
          $vue.$message({ type: 'warning', message: `运单(合同号${financePay.toString()})已结账，不能操作` });
          return Promise.reject(new Error(`运单(合同号${financePay.toString()})已结账，不能操作`));
        } else if (financeReconciled.length) {
          $vue.$message({ type: 'warning', message: `运单(合同号${financeReconciled.toString()})已对账，不能操作` });
          return Promise.reject(new Error(`运单(合同号${financeReconciled.toString()})已对账，不能操作`));
        } else if (financeJoin.length) {
          $vue.$message({ type: 'warning', message: `运单(合同号${financeJoin.toString()})已加入对账单，不能操作` });
          return Promise.reject(new Error(`运单(合同号${financeJoin.toString()})已加入对账单，不能操作`));
        }
        // 关单待办前置
        // if (invalidArr.length) {
        //   $vue.$message({ type: 'warning', message: `运单(合同号${invalidArr.toString()})有关单待办需要处理，不能操作` });
        //   return Promise.reject(new Error(`运单(合同号${invalidArr.toString()})有关单待办需要处理，不能操作`));
        // }
        break;

      case 'closeAgree':
        // 收付款前置
        if (financePrepayFee.length) {
          $vue.$message({ type: 'warning', message: `运单(合同号${financePrepayFee.toString()})预付款已在收付款，不能操作` });
          return Promise.reject(new Error(`运单(合同号${financePrepayFee.toString()})预付款已在收付款，不能操作`));
        } else if (financeArrivePayFee.length) {
          $vue.$message({ type: 'warning', message: `运单(合同号${financeArrivePayFee.toString()})货到付款已在收付款，不能操作` });
          return Promise.reject(new Error(`运单(合同号${financeArrivePayFee.toString()})货到付款已在收付款，不能操作`));
        } else if (financeCollectionFee.length) {
          $vue.$message({ type: 'warning', message: `运单(合同号${financeCollectionFee.toString()})代收货款已在收付款，不能操作` });
          return Promise.reject(new Error(`运单(合同号${financeCollectionFee.toString()})代收货款已在收付款，不能操作`));
        }
        // 已结账、已对账、已加入对账单前置
        if (financePay.length) {
          $vue.$message({ type: 'warning', message: `运单(合同号${financePay.toString()})已结账，不能操作` });
          return Promise.reject(new Error(`运单(合同号${financePay.toString()})已结账，不能操作`));
        } else if (financeReconciled.length) {
          $vue.$message({ type: 'warning', message: `运单(合同号${financeReconciled.toString()})已对账，不能操作` });
          return Promise.reject(new Error(`运单(合同号${financeReconciled.toString()})已对账，不能操作`));
        } else if (financeJoin.length) {
          $vue.$message({ type: 'warning', message: `运单(合同号${financeJoin.toString()})已加入对账单，不能操作` });
          return Promise.reject(new Error(`运单(合同号${financeJoin.toString()})已加入对账单，不能操作`));
        }
        break;
    }
    return Promise.resolve(true)
  }
}